package org.example;

import java.util.*;

//// 注意类名必须为 Main, 不要有任何 package xxx 信息
//public class Main {
//    static Set<Integer> getValidSquareSum() {
//        Set<Integer> set = new HashSet<>();
//        int i = 1;
//        while (true) {
//            set.add(i * i);
//            i++;
//            if (i >= 100000) {
//                return set;
//            }
//        }
//    }
//
//    public static void main(String[] args) {
////        Set<Integer> set = getValidSquareSum();
//
//
//        Scanner in = new Scanner(System.in);
//        // 注意 hasNext 和 hasNextLine 的区别
//        while (in.hasNextInt()) { // 注意 while 处理多个 case
//            int ans = 0;
//            int a = in.nextInt();
//            int b = in.nextInt();
////            for (int i = 0; i < a; i++) {
////                for (int j = 0; j < b; j++) {
////
////                }
////            }
//            System.out.println(Math.min(a, b));
//        }
//
//
//    }
//}


//// 注意类名必须为 Main, 不要有任何 package xxx 信息
//public class Main {
//    static int[][] DIRS = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
//    static char[] SEQ = new char[]{'A', 'B', 'C', 'D', 'E'};
//
//    static int dfs(char[][] grid, int h, int w) {
//        int ans = 0;
//        int[][] dp = new int[h][w];
//        for (int row = 0; row < h; row++) {
//            for (int col = 0; col < w; col++) {
//                if (grid[row][col] == 'A') {
//                    ans = Math.max(ans, dfs(grid, h, w, row, col, dp, 0));
//                }
//            }
//        }
//        return ans;
//    }
//
//    private static int dfs(char[][] grid, int h, int w, int row, int col, int[][] dp, int cur) {
//        if (dp[row][col] != 0) {
//            return dp[row][col];
//        }
//        int next = (cur + 1) % SEQ.length;
//        for (int[] dir : DIRS) {
//            int nextRow = row + dir[0];
//            int nextCol = col + dir[1];
//            if (inBounds(nextRow, nextCol, h, w) && grid[nextRow][nextCol] == SEQ[next]) {
//                dp[row][col] = Math.max(dp[row][col], dfs(grid, h, w, nextRow, nextCol, dp, next) + 1);
//            }
//        }
//        return dp[row][col];
//    }
//
//    static boolean inBounds(int row, int col, int h, int w) {
//        return row >= 0 && row < h && col >=0 && col < w;
//    }
//
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        // 注意 hasNext 和 hasNextLine 的区别
//        while (in.hasNextInt()) { // 注意 while 处理多个 case
//            int a = in.nextInt();
//            int b = in.nextInt();
//            in.nextLine();
//
//            char[][] grid = new char[a][b];
//            for (int i = 0; i < a; i++) {
//                String line = in.nextLine();
//                for (int j = 0; j < b; j++) {
//                    grid[i][j] = line.charAt(j);
//                }
//            }
//            System.out.println(dfs(grid, a, b));
//        }
//    }
//}


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            solve(in);
        }
    }

    private static void solve(Scanner in) {
        int n = in.nextInt();
        List<List<Integer>> grid = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            grid.add(new ArrayList<>());
        }
        int[] weights = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            weights[i] = in.nextInt();
        }

        for (int i = 1; i <= n - 1; i++) {
            int u = in.nextInt();
            int v = in.nextInt();
            grid.get(u).add(v);
        }

        int q = in.nextInt();
        for (int i = 0; i < q; i++) {
            int u = in.nextInt();
            int x = in.nextInt();
            weights[u] = x;
            for (int v : grid.get(u)) {
                weights[v] = x;
            }
        }

        int ans = 0;
        for (int i = 1; i <= n; i++) {
            ans += weights[i];
        }
        System.out.println(ans);
    }
}